<?php

/**
 * 由于返回数据的json并不规范，可能没有双引号啥的，json_decode 都会报错
 * 此函数用于广义解析json，补充格式
 */	
function no_check_json_decode($str, $mode=false)
{
    $str = GBK2UTF8($str);
    
    // 处理 {a:"b"}形式
    if(preg_match('/([0-9a-zA-Z\x{4e00}-\x{9fa5}]+):/u', $str))
    {
        $str = preg_replace("/([0-9a-zA-Z\x{4e00}-\x{9fa5}]+):/us", '"$1":', $str);
    }    
    
    // 处理 {"a":b}形式
    if(preg_match('/:([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)/u', $str))
    {
        $str = preg_replace('/:([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)/us', ':"$1"', $str);  
    }
    
    // 处理 {'a':'b'} 或一个单引号的形式
    if(preg_match("/\'([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)\'/u", $str))
    {
        $str = preg_replace('/\'([0-9a-zA-Z\x{4e00}-\x{9fa5}]+)\'/us', '"$1"', $str);  
    }
    
    return json_decode($str, $mode);  
}

/** 
 *自动判断把gbk或gb2312编码的字符串转为utf8 
 *能自动判断输入字符串的编码类，如果本身是utf-8就不用转换，否则就转换为utf-8的字符串 
 *支持的字符编码类型是：utf-8,gbk,gb2312 
 *@$str:string 字符串 
 */ 
function GBK2UTF8($str)
{ 
    $charset = mb_detect_encoding($str, array('UTF-8','GBK','GB2312')); 
    $charset = strtolower($charset); 
    if('cp936' == $charset)
    { 
        $charset='GBK'; 
    } 
    if("utf-8" != $charset)
    { 
        $str = iconv($charset,"UTF-8//IGNORE",$str); 
    } 
    return $str; 
}

// get url content, 包括支持https
function curl_get_url($url, $ssl_verifypeer="false")
{
    $cl = curl_init($url);
    curl_setopt($cl, CURLOPT_ENCODING, 'utf-8');
    curl_setopt($cl, CURLOPT_TIMEOUT, 5);
    curl_setopt($cl, CURLOPT_RETURNTRANSFER, true); // true表示不输出，只是将执行结果返回
    curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, $ssl_verifypeer);    // 不检测服务器合法性
    
    $ret = curl_exec($cl);
    curl_close($cl);
    
    return $ret;
}

// post data，包括支持https
function curl_post_url($url, $post_data, $ssl_verifypeer="false")
{
    $cl = curl_init($url);
    curl_setopt($cl, CURLOPT_ENCODING, 'utf-8');    
    
    curl_setopt($cl, CURLOPT_TIMEOUT, 5);
    curl_setopt($cl, CURLOPT_RETURNTRANSFER, true); // true表示不输出，只是将执行结果返回
    curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, $ssl_verifypeer);    
    
    curl_setopt($cl, CURLOPT_POST, 1);
    curl_setopt($cl, CURLOPT_POSTFIELDS, $post_data);
    
    $ret = curl_exec($cl);
    curl_close($cl);
    
    return $ret;
}

// 判断是否是合法的json格式数据
function isJson($json)
{
    if (is_object(json_decode($json))) 
    { 
        return true;
    }
    else
    {
        return false;
    }
}

?>